/*
    White Elephant - A Simple Cross Platform Line Testing App For Animations.
    Copyright (C) 2012  O. Bahri Gordebak
    
    Contact author at <gordebak@gmail.com>

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QGraphicsScene>
#include <QTimer>
#include <QGraphicsView>
#include <QLabel>
#include <QSpinBox>
#include <QSettings>

class SizeDialog;

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT
    
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    
private:
    Ui::MainWindow *ui;

    int frame;
    int frameCount;
    int layerCount;
    int currentLayer;
    bool isLooping;
    bool isFirstRun;
    bool isPlaying;
    int w;
    int h;
    QList<QList<QPixmap> > allImages;
    QGraphicsView *graphicsView;
    QGraphicsScene *scene;
    QGraphicsScene *thumbnailScene;
    QGraphicsView *frameThumbnail;
    QTimer *timer;
    QStringList fileNames;
    QList<bool> isEmpty;
    QList<bool> isMultiply;
    QList<bool> isHidden;
    QString layerNumberStr;
    QString frameNumberStr;
    SizeDialog *sizeDialog;
    QLabel *frameLabel;
    QLabel *layerLabel;
    QLabel *frameNumberLabel;
    QLabel *layerNumberLabel;
    QLabel *fpsLabel;
    QLabel *emptyLabel;
    QLabel *emptyLabel2;
    QSpinBox *fps;
    QSettings *settings;

private:
    void addImages(QStringList fileNames);
    void drawFrame();
    void updateLayers();
    void calculateFrameCount(QList<QPixmap> tmpList);

private slots:
    void play();
    void toggleLoop();
    void newAnim();
    void showNextFrame();
    void showPreviousFrame();
    void showFirstFrame();
    void showLastFrame();
    void addFiles();
    void playNextFrame();
    void render();
    void addLayer();
    void removeLayer();
    void layerUp();
    void layerDown();
    void layerTop();
    void layerBottom();
    void addEmptyFrame();
    void removeFrame();
    void makeWhiteTransparent();
    void hideLayer();
};

#endif // MAINWINDOW_H
